package com.br.servlets;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import com.br.dao.SalasDao;
import com.br.model.Jogador;
import com.br.model.Sala;
import com.br.util.StopUtils;

@WebServlet(value = "/EntrarSala")
public class EntrarSala extends HttpServlet {

	private static final long serialVersionUID = 1L;
	
	private static Logger logger = LogManager.getLogger(EntrarSala.class.getName());

	protected void service(HttpServletRequest req, HttpServletResponse res)
			throws ServletException, IOException {

		Jogador eu = (Jogador) req.getSession(true).getAttribute("jogador");
		if(eu == null){
			logger.debug("Sessao nao iniciada!");
			return;
		}
		
		logger.debug("INIT "+StopUtils.logAllParameters(req));
		
		String salaId = req.getParameter("uid");
		String option = req.getParameter("option");
		String myid = eu.getUid();

		JSONObject response = new JSONObject();
		
		try {
			if (StopUtils.notEmpty(myid) && StopUtils.notEmpty(salaId) && StopUtils.notEmpty(option)) {
				SalasDao dao = new SalasDao();

				boolean contem = false;
				Sala sala = dao.get(salaId);
				for (int i = 0; i < sala.getJogadores().size(); i++) {
					Jogador j = sala.getJogadores().get(i);
					if (j.getUid().equals(myid)) {
						contem = true;
						break;
					}
				}

				if (!contem) {
					sala.getJogadores().add(eu);
				}
				
				JSONObject jsonSala = new JSONObject();
				
				if(option.equalsIgnoreCase("desc")){
					
					jsonSala.put("uid", sala.getUid());
					jsonSala.put("nome", sala.getNome());
					
					jsonSala.put("vagas", sala.getQntVagas());
					jsonSala.put("qntJogadores", sala.getJogadores().size());
					
					jsonSala.put("rodadas", sala.getRodadas());
					jsonSala.put("rodadaAtual", sala.getRodadaAtual());
					
					jsonSala.put("owner", sala.getDono().getUid().equalsIgnoreCase(myid));
					
					JSONArray temas = new JSONArray();
					for (int i = 0; i < sala.getTemas().size(); i++) {
						String tema = sala.getTemas().get(i);
						temas.put(tema);
					}
					jsonSala.put("temas", temas);
					
				}else if(option.equalsIgnoreCase("players")){
					
					JSONArray jsonJogadores = new JSONArray();
					for (int i = 0; i < sala.getJogadores().size(); i++) {
						Jogador j = sala.getJogadores().get(i);
						jsonJogadores.put(j.getNome());
					}
					jsonSala.put("jogadores", jsonJogadores);
					
				}else if(option.equalsIgnoreCase("resumed")){
					
					jsonSala.put("vagas", sala.getQntVagas());
					jsonSala.put("qntJogadores", sala.getJogadores().size());
					
					jsonSala.put("rodadas", sala.getRodadas());
					jsonSala.put("rodadaAtual", sala.getRodadaAtual());
					
				}
				
				response.put("sala", jsonSala);
				response.put("error", false);
			} else {
				response.put("error", true);
				response.put("errorMsg", "Campos enviados inválidos.");
			}

		} catch (JSONException e) {
			logger.error("Erro JSON", e);
		}

		// retorna o json
		res.setCharacterEncoding("UTF-8");
		res.setContentType("application/json");
		res.getOutputStream().write(response.toString().getBytes());
		res.getOutputStream().flush();
		
		logger.debug("END "+response.toString());
	}

}
